<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>VUE学习 - 错误处理</title>
</head>

<body>


    <!--载入vue.js-->
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

    <div id="Application">
        <h2>若是</h2>

        您的名字是：{{data.name}} <br />
        您的ID是：{{data.id}}

    </div>
    <script>
        const app = Vue.createApp({
            setup() {
                const data = Vue.ref("");

                //创建一个请求实例
                const instance = axios.create({})

                //为请求实例添加请求拦截器
                instance.interceptors.request.use(
                    config => {
                        console.log("请求开始咯")
                        return config
                    }, err => {
                        //请求错误。一般http状态以4开头，401超时，404找不到文件等
                        return Promise.reject(err)
                    }
                )

                instance.interceptors.response.use(
                    res => {
                        return res
                    }, err => {
                        //响应错误，一般http状态码以5开头，500系统错误，502系统重启等，偏向于服务端返回错误
                        console.log("响应错误啦")
                        console.log(err)
                        return Promise.reject(err)
                    }
                )

                //使用
                instance.get('https://rouse.npc.ink/api/data.php')
                    .then(res => {
                        console.log("状态码：", res.status)
                        data.value = res.data;
                    })
                    .catch(err => {
                        //有错误就执行这一段
                        console.log(err.message)
                        console.log(err.code)
                        console.log("状态码：", err.status)
                        console.log(err)
                    })

                return { data };

            },
        })

        app.mount("#Application")
    </script>

</body>

</html>